今天好晚才回到家,差點來不及寫鐵人賽 QQQQQQQQ
好吧今天就是進行server node in python的部分,首先就是不免俗的建立python檔啦!
$ roscd beginner_tutorials/src
$ vim add_two_ints_server.py
$ chmod +x add_two_ints_server.py
然後程式碼如下:
   1 #!/usr/bin/env python
   2 
   3 from rospy_tutorials.srv import *
   4 import rospy
   5 
   6 def handle_add_two_ints(req):
   7     print "Returning [%s + %s = %s]"%(req.a, req.b, (req.a + req.b))
   8     return AddTwoIntsResponse(req.a + req.b)
   9 
  10 def add_two_ints_server():
  11     rospy.init_node('add_two_ints_server')
  12     s = rospy.Service('add_two_ints', AddTwoInts, handle_add_two_ints)
  13     print "Ready to add two ints."
  14     rospy.spin()
  15 
  16 if __name__ == "__main__":
  17     add_two_ints_server()
裡面比較需要注意的部分就是第12行啦,Service的函式定義如下:
rospy.Service(name, service_class, handler, buff_size=65536)
第一個參數就是service的名稱囉,接著是service的格式,這邊我們先用官方幫我們定義好的service格式,也就是AddTwoInts。第三個參數是呼叫這個service的時候的callback function,那第四個buff_size就是用來放接收到的request。
寫完以後要執行catkin_make進行建置,這是為了確定service已經被建立起來了。
建完之後就可以執行這個node啦,然後就可以用service call 這個指令去打API囉!
ROS tutorials - writing service in python
ROS wiki - rospy Services